posttools
<!DOCTYPE html>
<html lang="en" >
<head>
	<meta charset="UTF-8">
	<title>PostTools.</title>
	<link rel="stylesheet" type="text/css" href="./easyui/themes/default/easyui.css">
	<link rel="stylesheet" type="text/css" href="./easyui/themes/icon.css">
	<link rel="stylesheet" type="text/css" href="./easyui/demo.css">
	<script type="text/javascript" src="./jquery.min.js"></script>
	<script type="text/javascript" src="./easyui/jquery.easyui.min.js"></script>
	<!--script type="text/javascript" src="./easyui/control/datagrid-filter.js"></script-->
	<script src="./lokijs.js"></script>
	<script src="./loki-fs-structured-adapter.js"></script>

<style>
	.wrap {
		margin:5px 0;
		overflow: hidden;
        display:-moz-box;
          display:box;
              display: -webkit-box;
              -webkit-box-orient: horizontal;/* 横排显示*/
              }
       .child {
              min-height: 200px;
              border: 2px solid orangered;
              -webkit-box-flex: 1; /* 一比一*/
              margin: 20px;
              font-size: 100px;
              font-weight: bold;
              font-family: Georgia;
              -webkit-box-align: center; /* 居中显示*/
              }
</style>

</head>
<body>

<script type="text/javascript">
//! https://npm.taobao.org/mirrors/nwjs/v0.54.0/nwjs-v0.54.0-win-x64.zip
//!   db.addCollection("AuthController",  {unique: ['name'] , autoupdate: true } );
var fs=require("fs");
function stringToBase64(str){
    var base64Str = Buffer.from(str).toString('base64');
    return base64Str;
}
function base64ToString(base64Str){
    var str = Buffer.from(base64Str,'base64').toString();
    return str;
}
var chars = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
function genMixedRandstr(n) {
     var res = "";
     for(var i = 0; i < n ; i ++) {
         var id = Math.ceil(Math.random()*61);
         res += chars[id];
     }
     return res;
}
function genguids(psize){
	return (new Date()).Format("yyyyMMddhhmmssS_")+genMixedRandstr(psize);
}
function genguid(){
	return (new Date()).Format("yyyyMMddhhmmssS_")+genMixedRandstr(4);
}
// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子：
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S")   ==> 2006-7-2 8:9:4.18
Date.prototype.Format = function (fmt) { //author: meizz
  var o = {
    "M+": this.getMonth() + 1, //月份
    "d+": this.getDate(), //日
    "h+": this.getHours(), //小时
    "m+": this.getMinutes(), //分
    "s+": this.getSeconds(), //秒
    "q+": Math.floor((this.getMonth() + 3) / 3), //季度
    "S": this.getMilliseconds() //毫秒
  };
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  for (var k in o)
  if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  return fmt;
}
console.info(genMixedRandstr(300));
console.info(genMixedRandstr(300));
console.info(genMixedRandstr(300));

function log2db(tagsarr,turl,tcontexttype,tpostdetail,tresult,tresultd,tlasttime){
	var gid={
		gid: genguid,
		tags: tagsarr,
		creattime: (new Date()).Format("yyMMdd-hh-mm-ss-S_"),
		url: turl,
		contexttype:tcontexttype,
		postdetail:tpostdetail,
		result:tresult,
		resultd:tresultd,
		lasttime:tlasttime
	};
	dbentries.insert(gid);
}
function loadurldata(){
	var tsrc=$('#url').combobox('getData');
	for (let sitem of tsrc)
	{
		surlhists.add(sitem);
	}
}
function saveurldata(){
	var td="[";
	var j=0;
	for (let sitem of surlhists)
	{
		if(j<surlhists.size-1)
			td+='{"text":"'+sitem+'"},';
		else
			td+='{"text":"'+sitem+'"}';
		++j;
	}
	td+="]";
	fs.writeFileSync("./src/url_data1.json",td);
	$('#url').combobox('reload');
}
function postForm(ptype){
	var turl=$("#url").textbox('getValue');
	if(!surlhists.has(turl))
	{
		surlhists.add(turl);
		saveurldata();
	}
	var ip = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/;/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/;
	var tip = ip.exec(turl);
	console.info(tip);
	var tmpHPage = turl.split( "/" );
	console.info(tmpHPage);
	var fullip='';
	var channel='';
	if(tmpHPage.length>2)
		fullip=tmpHPage[2];
	if(tmpHPage.length>2)
	{
		channel=tmpHPage[3];
		if(channel.indexOf('?')>0)
			channel=channel.substr(0,channel.indexOf('?'));
	}

	var tcontexttype=$("#contexttype").textbox('getValue');
	var tpostdetail=$("#postdetail").textbox('getValue');
	var tagsarr=$("#tags").tagbox("getValues").toString();
	/**
	dataType 可选值取值枚举
	 "xml": 返回 XML 文档，可用 jQuery 处理。
	 "html": 返回纯文本 HTML 信息；包含的 script 标签会在插入 dom 时执行。
	 "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意：在远	程请求时(不在同一个域下)，所有 POST 请求都将转为 GET 请求。（因为将使用 DOM 的 script标签来加载）
	 "json": 返回 JSON 数据 。
	 "jsonp": JSONP 格式。使用 JSONP 形式调用函数时，如 "myurl?callback=?" jQuery 将自动替换 	? 为正确的函数名，以执行回调函数。
	 "text": 返回纯文本字符串
	**/
	var tbegint=new Date().getTime();
	var sendstr={ 
			IP:fullip,
			FULLIP:turl,
			CHANNEL:channel,
			REQTIME:(new Date()).Format("yyMMdd hh:mm:ss.S"),
			URL:turl,
			REQTYPE:ptype,
			CONTEXTTYPE:tcontexttype,
			REQSIZE:tpostdetail.length,
			RESTP:'',
			RESSIZE:0,
			TAGS:tagsarr,
			LASTTIME:0,
			RAWREQ:stringToBase64(tpostdetail),
			RAWRES:''
		};
	
	
	var roots=$('#tt').tree('getRoots');
	var rrrdate={};
	var rrr=nestfindt(roots,sendstr,0,rrrdate);
	console.info(rrr);
	var taddtreen;
	if(!rrr[1])
	{
		taddtreen=[{
				text: sendstr.IP,
				state: 'open',
				attributes:{depth:0},
				children: [{
					text: channel,
					attributes:{depth:1},
					children: [{
						text: ptype,
						attributes:{depth:2},
						children: [{
							text: tcontexttype,
							attributes:{depth:3}
						}]
					}]
				}]
			}];
			$('#tt').tree('append', {
				data: taddtreen
			});
	}
	else
	{
		taddtreen={ text: channel,
							text: ptype,
							children: [{
								text: tcontexttype,
									children: [{
									text: ''+sendstr.REQTIME+' req.length'+tpostdetail.length
								}]
							}]
						}
/*						
		switch(rrr[0])
		{
			case 0:{ 
					taddtreen={
						text: channel,
						children: [{
							text: ptype,
							children: [{
								text: tcontexttype,
									children: [{
									text: ''+sendstr.REQTIME+' req.length'+tpostdetail.length
								}]
							}]
						};
			}break;
		}*/
		$('#tt').tree('append', {
			parent:$('#'+rrr[1]),
			data: taddtreen
		});
	}
	

	if(!mtreen.get(tip) && 1==2)
	{
		var taddtreen=[{
			text: tip,
			state: 'open',
			children: [{
				text: channel,
				children: [{
					text: ptcontexttype,
					children: [{
						text: ptcontexttype,
							children: [{
							text: 'tpostdetail.length '+tpostdetail.length
						}]
					}]
				}]
			}]
		}]
		$('#tt').tree('append', {
			data: taddtreen
		});
	}
	if(ptype=='get')
	{
		$.ajax({
			type: 'get',
			url:turl,
			dataType:'text',
			success:function (tresult) {
				//var reso=JSON.stringify(data, null, ' ');
				$("#postres").textbox('setValue',tresult);
				console.info('get ok:'+tresult);
				additme(sendstr,tbegint,'success',tresult);
		//		log2db(tagsarr,turl,tcontexttype,tpostdetail,0,tresult,1);
			},
			error: function(xhr) {
				additme(sendstr,tbegint,'error','');
		//		log2db(tagsarr,turl,tcontexttype,tpostdetail,9,xhr,2);
				console.info('get error:'+xhr);
			}
		});
	}
	else
	{
		$.ajax({
			type: 'post',
			url:turl,
			contentType:tcontexttype,
			data:tpostdetail,
			dataType:'text',
			success:function (tresult) {
				//var reso=JSON.stringify(data, null, ' ');
				$("#postres").textbox('setValue',tresult);
				
				additme(sendstr,tbegint,'success',tresult);
		//		log2db(tagsarr,turl,tcontexttype,tpostdetail,0,tresult,1);
			},
			error: function(xhr) {
				additme(sendstr,tbegint,'error','');
		//		log2db(tagsarr,turl,tcontexttype,tpostdetail,9,xhr,2);
			}
		});
	}
	 
	downtip("send2 "+turl);
	
	
	/*		
	dbentries.insert({name:"jike", msg:"hello"}); //向集合插入文档数据
	db.save();  //保存
	
		var list = dbentries.find({name:"jike"});//查询name为jike的文档列表
		//支持两种查询 1、{property:name} 2、{property:{operator:value}}   operator表示取值范围
		var resultset = dbentries.chain().find({name:"jike"});  //提供对查询结果进行排序			
		var list = resultset.offset(1).limit(3).data();   //data() 表示返回对象数组，offset表示从哪开始，limit表示取限制几个
		console.info(list);	  
		$('#ff').form('submit',{
			onSubmit:function(){
				return $(this).form('enableValidation').form('validate');
			}
		});
	*/
}
var globvhist=[];
var globqueryhist=[];
function additme(sendstr,tbegint,trestp,tress){
	sendstr.LASTTIME=new Date().getTime()-tbegint;
	sendstr.RESTP=trestp;
	sendstr.RESSIZE=tress.length;
	sendstr.RAWRES=stringToBase64(tress);
	globvhist.push( sendstr );
	
	
	dbentries.insert(sendstr);
	db.save(); 
	
	
	
	$('#vhists').datalist('insertRow',{index:0,row:sendstr});
	fs.writeFileSync('./src/vhist.json',JSON.stringify(globvhist));
	console.info('post '+trestp+' : '+tress);
	
}
function onSelectRow(index,row){
	$("#url").textbox('setValue',row.URL);
	$("#contexttype").textbox('setValue',row.CONTEXTTYPE);
	$("#postdetail").textbox('setValue',base64ToString(row.RAWREQ));
	$("#postres").textbox('setValue',base64ToString(row.RAWRES));
	var tt=row.TAGS.split(',');
	$("#tags").tagbox("setValue",tt);
}
function onSelectTreeTabRow(index,row){
	
}
function getForm(){

/*	$('#ff').form('submit',{
		onSubmit:function(){
			return $(this).form('enableValidation').form('validate');
		}
	});
	*/
}
function clearForm(){
	//dbinit();
	$('#ff').form('clear');
	$('#postres').textbox('setValue','');
}
function decodeUnicode(str) {  
   var tr=eval("'" + str + "'"); 
   return tr;//tr.replace(new RegExp(/\\n/g)," \\n ");
}  
function formatRJson(){
	var ts=JSON.parse($('#postres').textbox('getValue'));
//	console.info(ts);
	$("#postres").textbox('setValue',JSON.stringify(ts, null, ' '));
	//$("#postres").textbox('setValue',decodeUnicode(JSON.stringify(ts, null, ' ')));
/**
$("#postres").textbox('setValue',tresult);
+$('#downtip').textbox('getValue');
**/	
}
function unionDecode(){
	var ts=$('#postres').textbox('getValue');

	$('#url').datagrid('reload');

}




var db ;
var dbentries;
// implement the autoloadback referenced in loki constructor
function databaseInitialize() {
console.info('databaseInitialize().');
  dbentries = db.getCollection("entries");
  if (dbentries === null) {
    dbentries = db.addCollection("entries",{autoupdate: true});
  }

  // kick off any program logic or start listening to external events
 // runProgramLogic();
}

// example method with any bootstrap logic to run after database initialized
function runProgramLogic() {
  var entryCount = db.getCollection("entries").count();
  console.log("number of entries in database : " + entryCount);
}

function dbinit(){
	 db = new loki("demo.db", { 
		autoload: true,
		autoloadCallback : databaseInitialize,
	   autosave: true,
	   autosaveInterval: 1000
	});  //使用new loki创建数据库，使用localStarge来作为底层数据存储时，参数"hello"是localStarge的key的名称
	
 //  db.loadDatabase();  //初始化DB后，调用loadDatabas方法来从localStrorage获取内容
   var coll = db.getCollection("test");  //为了存储文档，首先获取集合，使用db.addCollection来创建集合
   if(coll == null)
   {
    
   }
   else
   {	
   
   }
}
function downtip(par)
{
	var curv=new Date().toLocaleString()+" :"+par;
	curv+='\r\n'+$('#downtip').textbox('getValue');
	$('#downtip').textbox('setValue',curv);
}

var mtreen = new Map();
function nestfindt(children,sendstr,depth,pdata){
	var tfound=false;
	var vv='';
	var children2=null;
	var lastfoundj=-1;
	if(depth>3)
		return [0,null];
	for(j=0;j<children.length;j++)
	{
		switch(depth)
		{
			case 0:vv=sendstr.IP;	break;
			case 1:vv=sendstr.CHANNEL;	break;
			case 2:vv=sendstr.REQTYPE;	break;
			case 3:vv=sendstr.CONTEXTTYPE;	break;
		}
	//	pdata.text=vv;
		if(vv==children[j].text)
		{
			lastfoundj=j;
			if(children[j].children && children[j].children.length>0)
				children2=children[j].children;
			else
			{
				children2=null;
		//		pnode=children[j];
		//		break;
			}
				
		//	children2=$('#tt').tree('getChildren',children[j].target);
			if(children2)
			{
				tfound=true;
				var tdd={};
			//	pdata.children=[tdd];
				return nestfindt(children2,sendstr,depth+1,pdata);
			}
		}
	}
	if(lastfoundj>=0 && children[lastfoundj].domId)
		return [depth,children[lastfoundj].domId];
	else
		return [0,null]
}
function addTreeNode(sendstr){
	var found=false;
	if(!mtreen.get(tip))
	{
		var roots=$('#tt').tree('getRoots');
		/*
		for(i=0;i<roots.length;i++){
			if(roots[i].text==sendstr.IP)
			{
				var children=$('#tt').tree('getChildren',roots[i].target);
				for(j=0;j<children.length;j++)
				{
					if(children[j].text==sendstr.CHANNEL)
					{
						var children2=$('#tt').tree('getChildren',children[j].target);
						for(k=0;k<children2.length;k++)
						{
							if(children2[k].text==sendstr.REQTYPE)
							{
								if(sendstr.REQTYPE=='get')
								{
									
								}
							}
						}
					}
				}
			}
		}
		*/
		var taddtreen=[{
			text: sendstr.IP,
			state: 'open',
			children: [{
				text: channel,
				children: [{
					text: ptype,
					children: [{
						text: tcontexttype,
							children: [{
							text: 'tpostdetail.length '+tpostdetail.length
						}]
					}]
				}]
			}]
		}]
		$('#tt').tree('append', {
			data: taddtreen
		});
	}
}
function onTreeClick(node){
	console.info(node);
	var selected = $('#tt').tree('getSelected');
	if(selected)
		console.info(selected.target);

	//$(this).tree('beginEdit',node.target);
}
function querytreen(){
	console.info('querytreen');
	var tdd=null;
	var tall=dbentries.find();
	var tdetails=$("#sqlsrco").textbox('getValue');
	var tdobj=JSON.parse(tdetails);
	tdd=dbentries.find(tdobj);//{  'CHANNEL': {'$eq': 'invoice'}   });
	
	for(i=0;i<tdd.length;++i)
	{
		$('#vtreetab').datagrid('appendRow',tdd[i]);
	}
	var ttstr=(new Date()).Format("yyMMdd hh:mm:ss.S");
	var rawq=tdetails.replace(new RegExp('\r\n', 'g'), '');
	rawq=rawq.replace(new RegExp('\t', 'g'), '');
	rawq=rawq.replace(new RegExp(' ', 'g'), '');
	var tobj={text:ttstr+":"+rawq,querystr:tdetails};
	$('#sqlqhist').datalist('appendRow',tobj);
	globqueryhist.push(tobj);
	fs.writeFileSync('./src/sqlqhistd.json',JSON.stringify(globqueryhist));
}
function cleartreen(){
	$('#vtreetab').datagrid('loadData', []);
	globqueryhist=[];
	fs.writeFileSync('./src/sqlqhistd.json',JSON.stringify(globqueryhist));
}
function onSelectSqlHist(node,pw){
	console.info('onSelectSqlHist');
	$("#sqlsrco").textbox('setValue',pw.querystr);
}
var surlhists=new Set();
window.onload=function(){
	dbinit();
	setTimeout("loadurldata()","2000");
}

</script>
	<div class="easyui-layout" style="width:100%;height:700px;padding:0px 0px;margin:0px 0;">
		<!--div data-options="region:'north'" style="height:50px"></div-->
		<div data-options="region:'south',split:true" style="height:50px;">
			<input id="downtip" class="easyui-textbox" multiline="true"  style="width:100%;height:100%;margin:0px 0;">
		</div>
		<div data-options="region:'east',split:true" style="width:600px;;margin:0px 0;">
			<div style="margin-bottom:10px">
				<input class="easyui-combobox" id="url" name="URL" style="width:100%" data-options="
				url:'url_data1.json',
					method:'get',
					textField:'text',
					label:'URL:',required:false" value="http://192.168.41.63:8844/invoice">
			</div>			
			<div class="wrap">
			<div>
		
			<form id="ff" class="easyui-form" method="post" data-options="novalidate:true" style="width:280px;height:auto;padding:1px 1px;overflow: hidden" >
				<div style="margin-bottom:2">
					<input class="easyui-tagbox" id="tags" value="dgraph,tag" label="tags" style="width:100%" data-options="
						url: 'tagbox_data1.json',
						method: 'get',
						value: 'wsy',
						valueField: 'id',
						textField: 'text',
						limitToList: false,
						hasDownArrow: true
						" >
				</div>			

				<div style="margin-bottom:2px">
					<select class="easyui-combobox" id="contexttype" name="ContextType" label="ContextType" style="width:100%">
						<option value="text/plain">text/plain</option>
						<option value="text/html">text/html</option>
						<option value="application/json">application/json</option>
						<option value="application/xml">application/xml</option>						
						<option value="application/rdf">application/rdf</option>
						<option value="application/dql">application/dql</option>
						<option value="application/graphql">application/graphql</option>
					</select>
				</div>	
				<div style="margin-bottom:2px">
					<input class="easyui-textbox" id="postdetail" label="Context:" labelPosition="top" multiline="true" value="{}" style="width:100%;height:460px">
				</div>
			</form>		
						
			<div style="text-align:center;padding:2px 0">
				<a href="javascript:void(0)" class="easyui-linkbutton" onclick="postForm('post')" style="width:60px">Post</a>
				<a href="javascript:void(0)" class="easyui-linkbutton" onclick="postForm('get')" style="width:60px">Get</a>
				<a href="javascript:void(0)" class="easyui-linkbutton" onclick="clearForm()" style="width:60px">Clear</a>
				
			</div>		
			<div style="text-align:center;padding:2px 0">
				<a href="javascript:void(0)" class="easyui-linkbutton" onclick="formatRJson()" style="width:90px">JsonResult</a>
				<a href="javascript:void(0)" class="easyui-linkbutton" onclick="unionDecode()" style="width:100px">UnionDecode</a>
			</div>		
			</div>

			<div>
			<input class="easyui-textbox" id="postres" multiline="true" value="" style="width:300px;height:100%;" >
			</div>
       
            </div>		
		</div>
		<div data-options="region:'west',split:true" style="width:20px;;margin:0px 0;">
				<ul id="tt" class="easyui-tree" data-options="url:'tree_data1.json',method:'get',animate:false,onClick:onTreeClick" style="width:100%;height:100%;margin:0px 0;padding:1px 1px" ></ul>
		</div>
		<div data-options="region:'center' " >
		
			<div class="easyui-tabs" style="width:100%;height:100%">

				<div title="History" style="padding:5px">
					<table id="vhists" class="easyui-datagrid" style="width:100%;height:100%;border:false"
							data-options="singleSelect:true,fitColumns:false,collapsible:false,method:'get',url: 'vhist.json',fit:true,rownumbers:true,
							onSelect:onSelectRow">
						<thead>
							<tr>
								<th data-options="field:'REQTIME',width:140,sortable:true">发生时间</th>
								<th data-options="field:'FULLIP',width:200,sortable:true">IP</th>
								<th data-options="field:'CHANNEL',width:80,sortable:true">Channel</th>
								<th data-options="field:'REQTYPE',width:40,sortable:true">请求方式</th>
								<th data-options="field:'CONTEXTTYPE',width:80,sortable:true">Contexttype</th>
								<th data-options="field:'REQSIZE',width:50,sortable:true">请求长度</th>
								<th data-options="field:'RESTP',width:80,sortable:true">响应类型</th>
								<th data-options="field:'RESSIZE',width:40,sortable:true">响应长度</th>
								<th data-options="field:'TAGS',width:100">标签</th>
								<th data-options="field:'LASTTIME',width:100">持续时间</th>
							</tr>
						</thead>
					</table>	
				</div>
				<div title="TreeDetails" style="padding:5px;width:100%;height:100%" >
					<div class="wrap" >
						<div>
						
							<div style="margin-bottom:15px">
								<input class="easyui-textbox" id="sqlsrco" label="Context:" labelPosition="top" multiline="true" value="{}" style="width:300px;height:200px"></input>
							</div>

							<div style="margin-bottom:15px">
								<a href="javascript:void(0)" class="easyui-linkbutton" onclick="querytreen()" style="width:80px">Search</a>
								<a href="javascript:void(0)" class="easyui-linkbutton" onclick="cleartreen()" style="width:80px">Clear</a>
							</div>
					
						</div>
						<div>
							<div style="margin-bottom:15px">
								History
								<ul class="easyui-datalist" id="sqlqhist" label="History:" data-options="url:'sqlqhistd.json',onSelect:onSelectSqlHist" labelPosition="top" lines="true" style="top:10px;width:320px;height:225px"/>
							</div>
						</div>
					</div>
					<table id="vtreetab" class="easyui-datagrid" style="width:100%;height:100%;border:false"
							data-options="singleSelect:true,fitColumns:false,collapsible:false,method:'get',fit:true,rownumbers:true,
							onSelect:onSelectRow">
						<thead>
							<tr>
								<th data-options="field:'REQTIME',width:140,sortable:true">发生时间</th>
								<th data-options="field:'FULLIP',width:200,sortable:true">IP</th>
								<th data-options="field:'CHANNEL',width:80,sortable:true">Channel</th>
								<th data-options="field:'REQTYPE',width:40,sortable:true">请求方式</th>
								<th data-options="field:'CONTEXTTYPE',width:80,sortable:true">Contexttype</th>
								<th data-options="field:'REQSIZE',width:50,sortable:true">请求长度</th>
								<th data-options="field:'RESTP',width:80,sortable:true">响应类型</th>
								<th data-options="field:'RESSIZE',width:40,sortable:true">响应长度</th>
								<th data-options="field:'TAGS',width:100">标签</th>
								<th data-options="field:'LASTTIME',width:100">持续时间</th>
							</tr>
						</thead>
					</table>						
				</div>

			</div>

			
		</div>
	</div>
	
	
</body>
</html>